
#include "main.h"
#include "log.h"
#include "test.h"
#include "cJSON.h"
#include <stdio.h>

#define APP_NAME  "app1"
#define LIB_TEST 1

#if LIB_TEST
int lib_test(void)
{
	cJSON *root = NULL;

	/* 创建一个JSON数据对象（Object）(链表头结点) 根节点*/
	root = cJSON_CreateObject();
	if (root == NULL)
	{
		printf("Create fail.\n");
		return -1;
	}
	/*值（value）可以是双引号括起来的字符串（string）、数值(number)、true、false、 null、对象（object）或者数组（array）。这些结构可以嵌套。查看代码发现，所有value都存储在对象里（是JSON数据），有释放问题
	*/
	/* 根节点添加一条value为字符串类型，名称（name）为"name"的JSON数据(添加一个链表节点) */
	cJSON_AddStringToObject(root, "name", APP_NAME);

	/* 根节点添加一条value为整数类型，名称（name）为"age"的JSON数据(添加一个链表节点)，
		value在函数里都自动转换为double类型
	    CJSON_PUBLIC(cJSON*) cJSON_AddNumberToObject(cJSON * const object, const char * const name, const double number);
	    */
	cJSON_AddNumberToObject(root, "age", 22);

	/* 根节点添加一条value为浮点类型，名称（name）为"weight"的JSON数据(添加一个链表节点) */
	cJSON_AddNumberToObject(root, "weight", 55.5);

	/* 添加一个值为 False 的布尔类型，名称（name）为"student"的JSON数据(添加一个链表节点) */
	cJSON_AddFalseToObject(root, "student");

	/* 打印JSON对象(整条链表)的所有数据 */
	char *str = NULL;
	str = cJSON_Print(root);/*这种方法安全吗？*/
	printf("%s\n", str);


	/*（重要）释放链表资源*/
	printf("free space\n");
	cJSON_Delete(root);

	/*把*/
	if (str != NULL)
		/* note: include '<stdlib.h>' or provide a declaration of 'free'，本示例就不加了，*/
		//free(str);
		/*cJSON.c里有调用<stdlib.h>*/
		cJSON_free(str);
	return 0;
}
#endif

int main(void)
{
	char *	s	= MAIN_PRT_STR;


	//log_init(LOG_MODE_FILE,LOG_L_INF,APP_NAME, APP_NAME);
	log_init(LOG_MODE_STDOUT, LOG_L_DBG, APP_NAME, "_com");
	//log_init(LOG_MODE_FILE,LOG_L_DBG,APP_NAME, "");

	for (int i = 0; i < 1; i++) {
		LOG_ERR("%s %d\n", s, i);
		LOG_WRN("%s\n", s);
		LOG_INF("%s\n", s);
		LOG_DBG("%s\n", s);

	}
	test();
#if LIB_TEST
	lib_test();
#endif
	return 0;
}


